// pages/index/index.js
const api = require('../../utils/api.js');
let t, h, g, f, p;

Page({
  data: {
    temperature: 18, // 温度
    humidity: 43, // 湿度
    gasStatus: '安全', // 有害气体状态
    fireStatus: '无', // 火源状态
    peopleCount: 5, // 人员数量
    aiSummary: ' ', // AI总结
    textAreaHeight: 100, // 初始高度
    isLoading: false, // 是否正在加载
    historyList: [], // 历史记录
    currentTab: 'data', // 当前选中的标签
    isSwitching: false, // 是否正在切换标签
    currentTime: ' ', // 当前时间
    videoUrl: 'http://192.168.237.161:8000/stream ', // 视频流 URL
  },

  onLoad() {
    // 启动定时器，模拟实时数据变化
    //this.startDataUpdate();

    // 启动实时时间更新
    this.updateTime();
    setInterval(() => {
      this.updateTime();
    }, 1000); // 每秒更新一次时间
  },

  // 启动数据更新定时器
  /*startDataUpdate() {
    setInterval(() => {
      this.updateData();
    }, 5000); // 每 5 秒更新一次数据
  },

  // 更新数据
  updateData() {
    const newTemperature = this.getRandomValue(20, 40); // 温度在 20°C 到 40°C 之间随机变化
    const newHumidity = this.getRandomValue(20, 80); // 湿度在 20% 到 80% 之间随机变化
    const newGasStatus = Math.random() > 0.5 ? '安全' : '危险'; // 有害气体状态随机变化
    const newFireStatus = Math.random() > 0.8 ? '有' : '无'; // 火源状态随机变化
    const newPeopleCount = this.getRandomValue(0, 10); // 人员数量在 0 到 10 之间随机变化

    // 更新 data 中的状态
    this.setData({
      temperature: newTemperature,
      humidity: newHumidity,
      gasStatus: newGasStatus,
      fireStatus: newFireStatus,
      peopleCount: newPeopleCount,
    });

    console.log('数据已更新:', {
      temperature: newTemperature,
      humidity: newHumidity,
      gasStatus: newGasStatus,
      fireStatus: newFireStatus,
      peopleCount: newPeopleCount,
    });
    
  },

  // 生成随机值
  getRandomValue(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
  },
*/
  // 更新时间
  updateTime() {
    const now = new Date();
    const formattedTime = now.toLocaleString(); // 格式化时间
    this.setData({
      currentTime: formattedTime,
    });
  },

  // 点击分析按钮
  onAnalyze() {
    const { temperature, humidity, gasStatus, fireStatus, peopleCount } = this.data;
    t = this.data.temperature;
    h = this.data.humidity;
    g = this.data.gasStatus;
    f = this.data.fireStatus;
    p = this.data.peopleCount;

    // 构造AI分析请求的数据
    const analysisData = `此环境温度${temperature}度，湿度${humidity}%，有害气体${gasStatus}，火源${fireStatus}，根据此分析仓库状态300字，文末必须出现总体而言四个字，后面再总结30字，把建议写出来，比如说开启风扇，开启加湿器，或者注意什么隐患，不需要标题直接开始正文，不需要出现“比如”字眼`;

    // 设置加载状态
    this.setData({
      isLoading: true,
      aiSummary: '', // 清空之前的总结
    });

    // 调用API进行分析
    api
      .sendMessage(
        [
          {
            role: 'user',
            content: analysisData,
          },
        ],
        (data) => {
          // 返回一个 Promise，确保流式输出完成
          return new Promise((resolve) => {
            this.streamData(data, resolve);
          });
        }
      )
      .then(() => {
        // 结束加载状态
        this.setData({
          isLoading: false,
        });
      })
      .catch((err) => {
        console.error('API 请求失败:', err);
        wx.showToast({
          title: '请求失败，请重试',
          icon: 'none',
        });
        // 结束加载状态
        this.setData({
          isLoading: false,
        });
      });
  },

  // 流式输出数据
  streamData(data, resolve) {
    const currentTime = new Date().toLocaleString();
    const historyList = this.data.historyList;

    let index = 0;
    const interval = setInterval(() => {
      if (index < data.length) {
        this.setData({
          aiSummary: this.data.aiSummary + data[index], // 逐字添加到文本框
        });
        index++;
      } else {
        clearInterval(interval); // 停止定时器
        resolve(); // 流式输出完成，调用 resolve

        // 将结果添加到历史记录
        historyList.unshift({
          temperature: t,
          humidity: h,
          gasStatus: g,
          fireStatus: f,
          peopleCount: p,
          aiSummary: this.data.aiSummary, // 存储完整的 AI 分析总结
          time: currentTime,
        });
        this.setData({
          historyList: historyList.slice(0, 10), // 最多保留10条记录
        });
      }
    }, 50); // 每 50ms 输出一个字
  },

  // 监听 textarea 行数变化
  onTextAreaLineChange(e) {
    const lineCount = e.detail.lineCount;
    const lineHeight = 20; // 每行高度（根据实际字体大小调整）
    const newHeight = Math.max(100, lineCount * lineHeight); // 最小高度为 100px

    // 更新 scroll-view 的高度
    this.setData({
      textAreaHeight: newHeight,
    });
  },

  // 切换标签
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab;

    // 震动反馈
    wx.vibrateShort();

    // 显示加载动画
    this.setData({
      isSwitching: true,
    });

    // 延迟切换标签，模拟加载效果
    setTimeout(() => {
      this.setData({
        currentTab: tab,
        isSwitching: false,
        aiSummary: '', // 清空文本框内容
        textAreaHeight: 100, // 重置高度为初始值
      });
    }, 300); // 300ms 后切换
  },
});